Bow skill -> 0x0074A128
cross skill -> 0x00749DCC
Bow inventory -> 0x005CC8E4
Cross world pos -> 0x0056595E
Bow skill -> 0x0074A128
cross skill -> 0x00749DCC
Bow inventory -> 0x005CC8E4
Cross world pos -> 0x0056595E
Still bugged in safezone :/
__declspec(naked) void cCrossPos()
{
static DWORD Address1 = 0x00565994;
static DWORD Address2 = 0x005659E7;
_asm
{
Mov Ecx, Dword ptr ss : [ebp + 0x1C]
Mov Dword ptr ss : [ebp + 0x1C],Ecx
Mov IsCrossItem, Ecx
}
if (IsCrossItem >= ITEM2(4,8) && IsCrossItem <= ITEM2(4,14)||IsCrossItem == ITEM2(4,16)||IsCrossItem == ITEM2(4,18)||IsCrossItem == ITEM2(4,19)
||IsCrossItem == ITEM2(4,26))//new
{_asm{jmp Address1}}
else
{_asm{jmp Address2}}
}
SetRange((LPVOID)0x0056595E,6,ASM::NOP);
SetOp((LPVOID)0x0056595E,(LPVOID)cCrossPos,ASM::JMP);
Hi for all, I leave here Custom Shooting Effect, Inventory Position, Player Back Dimmension, etc Sources to added Bows to Client Side (Only).. is necessary fix server side too. Offsets to: 1.03.11 (JPN)
Screens:
Sources:
Code:[B][COLOR=#ff0000]// Bows Offsets [/COLOR][/B][B][COLOR=#ff0000]#define iBowAddSkillEffect 0x00699410[/COLOR][/B] [B][COLOR=#ff0000]#define iBowAddInventoryPos 0x0059F774[/COLOR][/B] [B][COLOR=#ff0000]#define iBowAddPlayerDimension 0x004E9A0B[/COLOR][/B] [B][COLOR=#ff0000]#define iCrossAddSkillEffect 0x006990DD[/COLOR][/B]
Code:DWORD IsBowItem = 0; DWORD IsCrossItem = 0; DWORD BowValue = 0x09C; DWORD MaxBoneCount = 0x108; DWORD WorldPosition = 0x0FC; DWORD oCreateEffect = 0x00650FF0; DWORD ReturnBowCode = 0x00699416; DWORD BowPosition = 0x0059F77C; DWORD NextBowPosition = 0x0059F7BB; DWORD ReturnCrossCode = 0x006990E3; void __declspec(naked) cBowAddSkillEffect() { _asm { mov edx,dword ptr ss:[ebp-0x8] mov dword ptr ss:[ebp-0x14],edx mov IsBowItem,edx } // --- if( IsBowItem == ObjectId(4, 25) ) // Lightning Bow { _asm { push -1 push 0 push 0 mov dx,word ptr ss:[ebp+0x18] push edx mov ax,word ptr ss:[ebp+0x14] push eax mov ecx,dword ptr ss:[ebp+0x0C] mov dx,word ptr ds:[ecx+0x2C] push edx mov eax,dword ptr ss:[ebp+0x0C] push eax mov ecx,dword ptr ss:[ebp-0x0C] push ecx mov edx,dword ptr ss:[ebp+0x0C] add edx, BowValue push edx mov eax,dword ptr ss:[ebp+0x0C] add eax, MaxBoneCount push eax mov ecx,dword ptr ss:[ebp+0x0C] add ecx, WorldPosition push ecx push 324 call oCreateEffect } } else if( IsBowItem == ObjectId(4, 26) ) // Divinity Bow { _asm { push -1 push 0 push 0 mov dx,word ptr ss:[ebp+0x18] push edx mov ax,word ptr ss:[ebp+0x14] push eax mov ecx,dword ptr ss:[ebp+0x0C] mov dx,word ptr ds:[ecx+0x2C] push edx mov eax,dword ptr ss:[ebp+0x0C] push eax mov ecx,dword ptr ss:[ebp-0x0C] push ecx mov edx,dword ptr ss:[ebp+0x0C] add edx, BowValue push edx mov eax,dword ptr ss:[ebp+0x0C] add eax, MaxBoneCount push eax mov ecx,dword ptr ss:[ebp+0x0C] add ecx, WorldPosition push ecx push 321 call oCreateEffect } } else if( IsBowItem == ObjectId(4, 27) ) // Angelic Bow { _asm { push -1 push 0 push 0 mov dx,word ptr ss:[ebp+0x18] push edx mov ax,word ptr ss:[ebp+0x14] push eax mov ecx,dword ptr ss:[ebp+0x0C] mov dx,word ptr ds:[ecx+0x2C] push edx mov eax,dword ptr ss:[ebp+0x0C] push eax mov ecx,dword ptr ss:[ebp-0x0C] push ecx mov edx,dword ptr ss:[ebp+0x0C] add edx, BowValue push edx mov eax,dword ptr ss:[ebp+0x0C] add eax, MaxBoneCount push eax mov ecx,dword ptr ss:[ebp+0x0C] add ecx, WorldPosition push ecx push 297 call oCreateEffect } } else if( IsBowItem == ObjectId(4, 28) ) // Thunder Bow { _asm { push -1 push 0 push 0 mov dx,word ptr ss:[ebp+0x18] push edx mov ax,word ptr ss:[ebp+0x14] push eax mov ecx,dword ptr ss:[ebp+0x0C] mov dx,word ptr ds:[ecx+0x2C] push edx mov eax,dword ptr ss:[ebp+0x0C] push eax mov ecx,dword ptr ss:[ebp-0x0C] push ecx mov edx,dword ptr ss:[ebp+0x0C] add edx, BowValue push edx mov eax,dword ptr ss:[ebp+0x0C] add eax, MaxBoneCount push eax mov ecx,dword ptr ss:[ebp+0x0C] add ecx, WorldPosition push ecx push 266 call oCreateEffect } } _asm { jmp ReturnBowCode } } void __declspec(naked) cCrossAddSkillEffect() { _asm { mov edx,dword ptr ss:[ebp-0x4] mov dword ptr ss:[ebp-0x10],edx mov IsCrossItem,edx } // --- if(IsCrossItem == ObjectId(4,129)) // Devil Crossbow { _asm { push -1 push 0 push 0 mov ax,word ptr ss:[ebp+0x18] push eax mov cx,word ptr ss:[ebp+0x14] push ecx mov edx,dword ptr ss:[ebp+0x0C] mov ax,word ptr ds:[edx+0x2C] push eax mov ecx,dword ptr ss:[ebp+0x10] push ecx push 0 mov edx,dword ptr ss:[ebp+0x0C] add edx,BowValue push edx mov eax,dword ptr ss:[ebp+0x0C] add eax,MaxBoneCount push eax mov ecx,dword ptr ss:[ebp+0x0C] add ecx,WorldPosition push ecx push 321 call oCreateEffect } } // --- _asm { jmp ReturnCrossCode } } void __declspec(naked) cBowAddInventoryPos() { _asm { mov IsBowItem, esi } // --- if(IsBowItem == 0x0B5A) { _asm{jmp BowPosition} } else if(IsBowItem == ObjectId(4,25)) { _asm{jmp BowPosition} } else if(IsBowItem == ObjectId(4,26)) { _asm{jmp BowPosition} } else if(IsBowItem == ObjectId(4,27)) { _asm{jmp BowPosition} } else if(IsBowItem == ObjectId(4,28)) { _asm{jmp BowPosition} } else { _asm{jmp NextBowPosition} } } DWORD BowAddPlayerDimension_Offset = 0x004E9A12; void __declspec(naked) cBowAddPlayerDimension() { _asm { CMP DWORD PTR SS:[EBP+0x1C],0x0B56 JE ReturnLoad CMP DWORD PTR SS:[EBP+0x1C],ObjectId(4,24) JE ReturnLoad CMP DWORD PTR SS:[EBP+0x1C],ObjectId(4,25) JE ReturnLoad CMP DWORD PTR SS:[EBP+0x1C],ObjectId(4,26) JE ReturnLoad CMP DWORD PTR SS:[EBP+0x1C],ObjectId(4,27) JE ReturnLoad CMP DWORD PTR SS:[EBP+0x1C],ObjectId(4,28) JE ReturnLoad // --- ReturnLoad: // --- JMP BowAddPlayerDimension_Offset } } void InitBows() { Utils.SetRange((LPVOID)iBowAddSkillEffect, 6, ASM::NOP); Utils.SetJmp((LPVOID)iBowAddSkillEffect, cBowAddSkillEffect); // ---- Utils.SetRange((LPVOID)iBowAddInventoryPos, 6, ASM::NOP); Utils.SetJmp((LPVOID)iBowAddInventoryPos, cBowAddInventoryPos); // ---- Utils.SetRange((LPVOID)iBowAddPlayerDimension, 7, ASM::NOP); Utils.SetJmp((LPVOID)iBowAddPlayerDimension, cBowAddPlayerDimension); // ---- Utils.SetRange((LPVOID)iCrossAddSkillEffect, 6, ASM::NOP); Utils.SetJmp((LPVOID)iCrossAddSkillEffect, cCrossAddSkillEffect); }
Credits:
Webzen
Nemesis
SetRange((LPVOID)0x00749C90,0x94A,ASM::NOP);
SetOp((LPVOID)0x00749C90,(LPVOID)CreateBowSkillEffect,ASM::JMP);
void CreateBowSkillEffect(DWORD lpObj, DWORD lpModel, DWORD Owner, BYTE a4, BYTE a5, WORD Skill)
{
short Bow;
short CrossBow;
int EffectType;
lpViewObj gObj = &*(ObjectPreview*)lpObj;
lpModelObj gModel = &*(ViewPortObject*)lpModel;
vec3_t Color;
vec3_t VecPos;
vec3_t WorldPos;
Vector(gModel->ColorR, gModel->ColorG, gModel->ColorB, Color);
Vector(gModel->VecPos.X, gModel->VecPos.Y, gModel->VecPos.Z, VecPos);
Vector(gModel->WorldPos.X, gModel->WorldPos.Y, gModel->WorldPos.Z, WorldPos);
EffectType = 0;
CrossBow = gObj->WeaponFirstSlot;
Bow = gObj->WeaponSecondSlot;
if (lpObj == oUserPreviewStruct)
{
CrossBow = *((short *)oUserObjectStruct_ + 2336);
Bow = *(short *)(oUserObjectStruct_ + 4779);
if (CrossBow != -1)
CrossBow += ITEM_BASE_MODEL;
if (Bow != -1)
Bow += ITEM_BASE_MODEL;
}
if (Skill == Penetration || Skill == PenetrationImproved)
{
EffectType = 2;
sub_6D6C20(85, lpModel, 0);
}
*(int*)0x8793730 = Skill;
if (Skill == IceArrow || Skill == IceArrowImproved)
sub_6D6C20(130, lpModel, 0);
if (a5 == 2)
EffectType = 99;
if (Skill == Starfall)
{
gEffect.CreateEffect(365, VecPos, WorldPos, Color, 0, Owner, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
}
else
{
switch (CrossBow)
{
case 3227:
{
gEffect.CreateEffect(296, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
}
break;
case 3228:
gEffect.CreateEffect(267, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3229:
gEffect.CreateEffect(271, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3230:
gEffect.CreateEffect(269, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3231:
gEffect.CreateEffect(268, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3232:
gEffect.CreateEffect(274, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3233:
gEffect.CreateEffect(273, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3235:
gEffect.CreateEffect(294, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3237:
gEffect.CreateEffect(321, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3238:
gEffect.CreateEffect(324, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case ITEM2(4, 26): //Devil CrossBow
gEffect.CreateEffect(296, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
default:
break;
}
switch (Bow)
{
case 3219:
gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3220:
gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3221:
gEffect.CreateEffect(270, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3222:
gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3223:
gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3224:
gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3225:
gEffect.CreateEffect(272, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3236:
gEffect.CreateEffect(295, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3239:
gEffect.CreateEffect(335, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3240:
gEffect.CreateEffect(296, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3241:
gEffect.CreateEffect(297, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3242:
gEffect.CreateEffect(298, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3243:
gEffect.CreateEffect(509, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3246:
gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case ITEM2(4, 25): //Angelic Bow
gEffect.CreateEffect(509, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case ITEM2(4, 28): //Bloodangel Bow
gEffect.CreateEffect(321, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case ITEM2(4, 36): //Holyangel Bow
{
int EID[10] = { 266, 270, 272, 295, 335, 296, 297, 298, 509, 266 };
gEffect.CreateEffect(EID[rand() % 10], VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
//gEffect.CreateEffect(294, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
}
break;
default:
break;
}
}
}
decompiled version main 1.04.05
Code:SetRange((LPVOID)0x00749C90,0x94A,ASM::NOP); SetOp((LPVOID)0x00749C90,(LPVOID)CreateBowSkillEffect,ASM::JMP); void CreateBowSkillEffect(DWORD lpObj, DWORD lpModel, DWORD Owner, BYTE a4, BYTE a5, WORD Skill) { short Bow; short CrossBow; int EffectType; lpViewObj gObj = &*(ObjectPreview*)lpObj; lpModelObj gModel = &*(ViewPortObject*)lpModel; vec3_t Color; vec3_t VecPos; vec3_t WorldPos; Vector(gModel->ColorR, gModel->ColorG, gModel->ColorB, Color); Vector(gModel->VecPos.X, gModel->VecPos.Y, gModel->VecPos.Z, VecPos); Vector(gModel->WorldPos.X, gModel->WorldPos.Y, gModel->WorldPos.Z, WorldPos); EffectType = 0; CrossBow = gObj->WeaponFirstSlot; Bow = gObj->WeaponSecondSlot; if (lpObj == oUserPreviewStruct) { CrossBow = *((short *)oUserObjectStruct_ + 2336); Bow = *(short *)(oUserObjectStruct_ + 4779); if (CrossBow != -1) CrossBow += ITEM_BASE_MODEL; if (Bow != -1) Bow += ITEM_BASE_MODEL; } if (Skill == Penetration || Skill == PenetrationImproved) { EffectType = 2; sub_6D6C20(85, lpModel, 0); } *(int*)0x8793730 = Skill; if (Skill == IceArrow || Skill == IceArrowImproved) sub_6D6C20(130, lpModel, 0); if (a5 == 2) EffectType = 99; if (Skill == Starfall) { gEffect.CreateEffect(365, VecPos, WorldPos, Color, 0, Owner, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); } else { switch (CrossBow) { case 3227: { gEffect.CreateEffect(296, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); } break; case 3228: gEffect.CreateEffect(267, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3229: gEffect.CreateEffect(271, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3230: gEffect.CreateEffect(269, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3231: gEffect.CreateEffect(268, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3232: gEffect.CreateEffect(274, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3233: gEffect.CreateEffect(273, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3235: gEffect.CreateEffect(294, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3237: gEffect.CreateEffect(321, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3238: gEffect.CreateEffect(324, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case ITEM2(4, 26): //Devil CrossBow gEffect.CreateEffect(296, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; default: break; } switch (Bow) { case 3219: gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3220: gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3221: gEffect.CreateEffect(270, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3222: gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3223: gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3224: gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3225: gEffect.CreateEffect(272, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3236: gEffect.CreateEffect(295, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3239: gEffect.CreateEffect(335, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3240: gEffect.CreateEffect(296, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3241: gEffect.CreateEffect(297, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3242: gEffect.CreateEffect(298, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3243: gEffect.CreateEffect(509, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case 3246: gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case ITEM2(4, 25): //Angelic Bow gEffect.CreateEffect(509, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case ITEM2(4, 28): //Bloodangel Bow gEffect.CreateEffect(321, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); break; case ITEM2(4, 36): //Holyangel Bow { int EID[10] = { 266, 270, 272, 295, 335, 296, 297, 298, 509, 266 }; gEffect.CreateEffect(EID[rand() % 10], VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); //gEffect.CreateEffect(294, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1); } break; default: break; } } }