/*---------------------------------------------------------------------- 函数名称: int UserNumberExist(char *userNumber) 作用: 对用户输入的工号进行确认 参数: char *userNumber 用户工号 返回值: 返回类型 int 返回结果 0 工号位数不正确 1 工号正确 2 工号不正确 3 工号输入不正确并超过三次 创建日期: 2005.9 创建人: 莫远明 最后修改日期: 2008.5 最后修改人: 王海伟 ----------------------------------------------------------------------*/ BOOL UserNumberExist(char *userNumber) { int i ; BOOL ret = F; long int rowscount; rowscount=atol(CollectHead.Recordcount); for(i=0;i<rowscount;i++) { if(0==strncmp(userNumber,MsgCollect[i].collno,Getg_userNumberLen())) { SetG_User_Index (i); SetG_collectType(GetUserGroup(MsgCollect[i].identify[0])); Setg_szName(MsgCollect[i].collname); SetG_Number(MsgCollect[i].collno); ret =T; break; } } if(!ret) { if (0 == strncmp(userNumber, "8888888888", Getg_userNumberLen())) { SetG_collectType(GetUserGroup('1')); Setg_szName("收费员测试账号"); ret = T; } else if (0 == strncmp(userNumber, "9999999999", Getg_userNumberLen())) { SetG_collectType(GetUserGroup('9')); Setg_szName("未知测试员账号"); ret = T; } else if (0 == strncmp(userNumber, "0000000000", Getg_userNumberLen())) { SetG_collectType(GetUserGroup('2')); Setg_szName("维护员测试账号"); ret = T; } else if (0 == strncmp(userNumber, "7777777777", Getg_userNumberLen())) { SetG_collectType(GetUserGroup('1')); Setg_szName("维护员测试账号"); ret = T; } } return ret; }
/*---------------------------------------------------------------------- 函数名称: int UserNumberExist(char *userNumber) 作用: 对用户输入的工号进行确认 参数: char *userNumber 用户工号 返回值: 返回类型 int 返回结果 0 工号位数不正确 1 工号正确 2 工号不正确 3 工号输入不正确并超过三次 创建日期: 2005.9 创建人: 莫远明 最后修改日期: 2008.5 最后修改人: 王海伟 ----------------------------------------------------------------------*/ BOOL UserNumberExist(char *userNumber) { int i ; BOOL ret = F; long int rowscount; rowscount=atol(CollectHead.Recordcount); for(i=0;i<rowscount;i++) { if(0==strncmp(userNumber,MsgCollect[i].collno,Getg_userNumberLen())) { SetG_User_Index (i); SetG_collectType(GetUserGroup(MsgCollect[i].identify[0])); Setg_szName(MsgCollect[i].collname); SetG_Number(MsgCollect[i].collno); ret =T; break; } } if(!ret) { if(0==strncmp(userNumber,"7777777777",Getg_userNumberLen())) { SetG_collectType("1"); Setg_szName("开发测试工号"); ret =T; } else if(0==strncmp(userNumber,"555555555",Getg_userNumberLen())) { SetG_collectType("9"); Setg_szName("配置工号"); ret =T; } } return ret; }
void CUser::Attack(Packet & pkt) { int16 sid = -1, tid = -1, damage, delaytime, distance; uint8 bType, bResult = 0; Unit * pTarget = nullptr; pkt >> bType >> bResult >> tid >> delaytime >> distance; // delaytime = delaytime / 100.0f; // distance = distance / 10.0f; if (isIncapacitated()) return; if (isInSafetyArea()) return; if (m_bInvisibilityType != INVIS_NONE) { CMagicProcess::RemoveStealth(this, INVIS_DISPEL_ON_MOVE); CMagicProcess::RemoveStealth(this, INVIS_DISPEL_ON_ATTACK); } // If you're holding a weapon, do a client-based (ugh, do not trust!) delay check. _ITEM_TABLE *pTable = GetItemPrototype(RIGHTHAND); if (pTable != nullptr) { if (delaytime < (pTable->m_sDelay + 10) // client adds 0.1 onto the interval (0.1 of 100 is 10) || distance > pTable->m_sRange) return; } // Empty handed. else if (delaytime < 100) return; pTarget = g_pMain->GetUnitPtr(tid); bResult = ATTACK_FAIL; if (pTarget != nullptr && isInAttackRange(pTarget) && CanAttack(pTarget)) { if (isAttackable(pTarget) && CanCastRHit(GetSocketID())) { if (isInTempleEventZone()) if (GetUserGroup() != -1 && !isSameUserGroup(pTarget)) return; CUser *pUser = g_pMain->GetUserPtr(GetSocketID()); if (pUser != nullptr) pUser->m_RHitRepeatList.insert(std::make_pair(GetSocketID(), UNIXTIME)); damage = GetDamage(pTarget); // Can't use R attacks in the Snow War. if (GetZoneID() == ZONE_SNOW_BATTLE && g_pMain->m_byBattleOpen == SNOW_BATTLE) damage = 0; if (damage > 0) { pTarget->HpChange(-damage, this); if (pTarget->isDead()) bResult = ATTACK_TARGET_DEAD; else bResult = ATTACK_SUCCESS; // Every attack takes a little of your weapon's durability. ItemWoreOut(ATTACK, damage); // Every hit takes a little of the defender's armour durability. if (pTarget->isPlayer()) TO_USER(pTarget)->ItemWoreOut(DEFENCE, damage); } } } Packet result(WIZ_ATTACK, bType); result << bResult << GetSocketID() << tid; SendToRegion(&result); }
//------------------------------------------------------------------------------ BOOL registry_users_extract(sqlite3 *db, unsigned int session_id) { BOOL ok = FALSE; DWORD userRID; USERS_INFOS User_infos; //import syskey char sk[MAX_PATH]=""; BOOL syskeyok = registry_syskey_local(sk, MAX_PATH); //get current computer name char computer_name[COMPUTER_NAME_SIZE_MAX]=""; DWORD taille = COMPUTER_NAME_SIZE_MAX; GetComputerName(computer_name,&taille); //Set ACL in registry int ret = set_sam_tree_access(HKEY_LOCAL_MACHINE,"SECURITY\\SAM\\Domains\\Account\\Users"); if (ret == 0) { //get reference key for users hashs HKEY CleTmp; BOOL ok_test; BYTE b_f[MAX_LINE_SIZE]; if(ReadValue(HKEY_LOCAL_MACHINE, "SAM\\SAM\\Domains\\Account", "F", (char*)b_f, MAX_LINE_SIZE)<= 0x80)b_f[0] = 0; //get users if (RegOpenKey(HKEY_LOCAL_MACHINE,"SAM\\SAM\\Domains\\Account\\Users\\",&CleTmp)==ERROR_SUCCESS) { DWORD i, valueSize, SizeSubKeyName, nbSubKey = 0; if (RegQueryInfoKey (CleTmp,0,0,0,&nbSubKey,0,0,0,0,0,0,0)==ERROR_SUCCESS) { char SubKeyName[MAX_PATH], path[MAX_PATH], buffer[MAX_LINE_SIZE], cbuffer[MAX_LINE_SIZE]; for (i=0;i<nbSubKey;i++) { ok_test = FALSE; SizeSubKeyName=MAX_PATH;// on reinitialise la taille a chaque fois sinon il ne lit pas la valeur suivant SubKeyName[0] = 0; if(RegEnumKeyEx (CleTmp,i,SubKeyName,&SizeSubKeyName,0,0,0,0)!=ERROR_SUCCESS)continue; //read value snprintf(path,MAX_PATH,"SAM\\SAM\\Domains\\Account\\Users\\%s",SubKeyName); //F value cbuffer[0]= 0; buffer[0] = 0; userRID = 0; valueSize = ReadValue(HKEY_LOCAL_MACHINE, path, "F", buffer, MAX_LINE_SIZE); if (valueSize) { DataToHexaChar(buffer, valueSize, cbuffer, MAX_LINE_SIZE); userRID = TestUserDataFromSAM_F(&User_infos,cbuffer); ok_test = TRUE; } //V value cbuffer[0]= 0; buffer[0] = 0; valueSize = ReadValue(HKEY_LOCAL_MACHINE, path, "V", buffer, MAX_LINE_SIZE); if (valueSize) { //read datas DataToHexaChar(buffer, valueSize, cbuffer, MAX_LINE_SIZE); if(TestUserDataFromSAM_V(&User_infos,cbuffer,computer_name)) { //test if rid and sid ok userRID = HTDF(SubKeyName,8); if(User_infos.RID[0] == 0)snprintf(User_infos.RID,MAX_PATH,"%05lu",userRID); if(User_infos.SID[0] == 0)snprintf(User_infos.SID,MAX_PATH,"S-1-5-?-?-?-?-%lu",userRID); }else { if((User_infos.RID[0] == 0) && userRID)snprintf(User_infos.RID,MAX_PATH,"%05lu",userRID); if((User_infos.SID[0] == 0) && userRID)snprintf(User_infos.SID,MAX_PATH,"S-1-5-?-?-?-?-%lu",userRID); } ok_test = TRUE; }else { if((User_infos.RID[0] == 0) && userRID)snprintf(User_infos.RID,MAX_PATH,"%05lu",userRID); if((User_infos.SID[0] == 0) && userRID)snprintf(User_infos.SID,MAX_PATH,"S-1-5-?-?-?-?-%lu",userRID); } if (!ok_test)continue; //get groups if (userRID) GetUserGroup(userRID, User_infos.group, MAX_PATH); //get hashs if((b_f[0] != 0) && syskeyok) { DecodeSAMHashXP(sk,User_infos.pwdump_pwd_raw_format,userRID,User_infos.name,b_f); } //add user convertStringToSQL(User_infos.description, MAX_PATH); addRegistryUsertoDB("HKEY_LOCAL_MACHINE\\SAM",User_infos.name, User_infos.RID, User_infos.SID, User_infos.group, User_infos.description, User_infos.last_logon, User_infos.last_password_change, User_infos.nb_connexion, User_infos.type, User_infos.state_id,session_id, db); //add password if (TEST_REG_PASSWORD_ENABLE) addPasswordtoDB("HKEY_LOCAL_MACHINE\\SAM", User_infos.name, User_infos.pwdump_pwd_format, User_infos.pwdump_pwd_raw_format, REG_PASSWORD_STRING_LOCAL_USER, session_id, db); ok = TRUE; } } RegCloseKey(CleTmp); } } //Restore ACL in registry restore_sam_tree_access(HKEY_LOCAL_MACHINE,"SECURITY\\SAM\\Domains\\Account\\Users"); return ok; }